#include <cstdio>
#include <vector>
#include <queue>
using namespace std;
struct node{
    double price;
    vector<int> next;
    int tot;//Retailer's selling num
    node(){//For reviewing constructor
        price = 0;
        tot = 0;
    }
};
static vector<node> chain;

static int N;
static double P, r;

static bool isntroot[100001] = {false};

static queue<int> que;
double total = 0;
void init()
{//Build Tree First
    scanf("%d%ld%ld", &N, &P, &r);
    int num;
    for(int i = 0; i < N; ++i)
    {
        node nod;
        scanf("%d", &num);
        if(0 == num)
        {//retailer
            scanf("%d", &nod.tot);
        }else{//supplier
            int tmp;
            for(int j = 0; j < num; ++j)
            {
                scanf("%d", &tmp);
                isntroot[tmp] = true;
                nod.next.push_back(tmp);
            }
        }
        chain.push_back(nod);
    }
}
int findroot()
{//Find root
    int i;
    for(i = 0; isntroot[i] && i < N; ++i);
    return (i == N) ? -1 : i;//For robustness
}
double level_traverse_gettotal(int root)
{//Traverse the tree builded before. Then fill the price part. Finally count the total selling
    if(-1 == root) return 0;
    que.push(root);
    while(!que.empty())
    {
        int size;
        node fro = chain[que.front()];
        if(!fro.next.empty())
        {
            size = fro.next.size();
            for(int i = 0; i < size; i++)
            {
                chain[fro.next[i]].price = fro.price * (1 + r * 0.01);
                que.push(fro.next[i]);
            }
        }else{
            total += fro.price * fro.tot;
        }
        que.pop();
    }
    return total;
}
int main()
{
    //init();//With the returning of function init(), the data struct it build is destoried.
    scanf("%d%lf%lf", &N, &P, &r);//%ld is not corresponding to double datatype!!!
    for(int i = 0; i < N; ++i)
    {
        int num;
        node nod;
        scanf("%d", &num);
        if(0 == num)
        {//retailer
            scanf("%d", &nod.tot);
        }else{//supplier
            int tmp;
            for(int j = 0; j < num; ++j)
            {
                scanf("%d", &tmp);
                isntroot[tmp] = true;
                nod.next.push_back(tmp);
            }
        }
        chain.push_back(nod); 
    }
    int root = findroot();
    chain[root].price = P;
    printf("%.1lf\n", level_traverse_gettotal(root));//Not %ld!!!
    return 0;
}